Regular expression
正規表現 - JavaScript | MDN
大体ここに載っている
var regexp = /abc/
正規表現の指定時に最後の/の後にフラグを指定することで、正規表現にオプション機能を加えることができます。
$ var regexp = /abc/i
主に使用されるフラグは以下の3つです。
i - 大文字小文字を区別しない
g - グローバルサーチ
m - 複数行検索
フラグは複数まとめて指定することもできます。
var regexp = /abc/im
regexp.test(str)
RegExpのtestメソッドは、引数の文字列が正規表現にマッチするかを検査するメソッドです。
文字列が正規表現にマッチする場合、trueを返します。
regexp.exec(str)
RegExpのexecメソッドは引数の文字列が正規表現にマッチする場合、その結果をオブジェクトとして返すメソッドです。
マッチしなかった場合はnullを返します。
返り値のオブジェクトは配列をベースとしたオブジェクトで、以下の2つのプロパティが追加されています。
index: 引数の文字列中でマッチした部分の開始位置(0ベースインデックス)
input: 引数の文字列全体
配列の先頭には文字列中のマッチした部分文字列が格納されます。
また、後述するキャプチャという機能が正規表現内で使用されている場合は、キャプチャされた文字列が配列の2番目以降に格納されます。
str.match(regexp)
Stringのmatchメソッドは引数として正規表現を取るメソッドで、その実行結果はRegExp#execと同じです。
その実行結果はRegExp#execと同じです。
主体となるオブジェクトと引数が逆転していて混乱しがちなので、RegExp#execとString#matchのどちらか一方、使い慣れたものを常に使うようにした方が良いでしょう。
str.search(regexp)
Stringのsearchメソッドは引数として正規表現を取るメソッドで、マッチする文字列の開始位置を返します。
マッチしなかった場合は-1を返します。
str.split(regexp)
Stringのsplitメソッドは引数としてStringまたは正規表現を取るメソッドで、正規表現を引数とした場合はそれにマッチする部分で区切って文字列を分割します。
マッチしなかった場合は元の文字列全体のみを含む配列が返されます。
引数が正規表現ではなく文字列だった場合、その文字列に完全一致する部分で区切って文字列を分割します。
var str = "abc;def;ghi";
handleRegexpResult(str.split(";")); //[abc, def, ghi]
str.replace(String, "x")
Stringのreplaceメソッドは第1引数としてStringまたは正規表現を取り、それにマッチする文字列を第2引数の文字列で置き換えます。
正規表現にgフラグがない場合は、マッチする部分文字列が複数ある場合でも最初の1つだけが置換されます。
/hoge*/ hgo + eが0個以上
/hoge+/ hog + eが1個以上
/hoge?/ 直前の文字の 0 回か 1 回の出現にマッチする
/e?le?/は "angel"の 'el' や "angle"の 'le'、あるいは "oslo"の'l' にマッチします。
/h.ge/ 任意の1文字
/h.*ge 任意の複数文字
/^a/先頭にa
/b$/末尾にb
/\*/特殊文字のエスケープ\
/[a-z]+/
文字集合は指定された文字のいずれか1つとマッチする正規表現です。
文字集合は[と]の間に文字を列挙することで定義します。
[)-] -> )と-を許容
var regexp = /[abcdef]/; //abcdefのいずれかの1文字にマッチします
文字集合内では*, +などの特殊記号は使用できないのでエスケープする必要はありません。
a-zでfrom a to z.
/[^abs]+/
文字集合の先頭に ^をつけた場合、文字集合の否定
/\d+/ 数字の連続 /[0-9]/the same.
/\w+1/小文字, 大文字アルファベット数字_. [a-zA-Z0-9_] the same.
/\n/改行.
/\s/空白
/\d{3}/ 3 times, the number repeats.
/\d{3,4}/ 3 - 4times, the number repeats.
regexp.exec(str)
regexp = /(\d+)-\d+-\d+/;
グループ化( )
(じゃ)+ーん 
じゃーん じゃじゃーん じゃじゃじゃーん
JavaScript String.matchとRegExp.execと後方参照
後方参照: \N と \k<name>
正規表現で名前付きキャプチャを使う
\1 最初のグループと一致
/(\w+)-.*-\1/
キャプチャした文字列はreplaceメソッドの中で、$1, $2のように参照できます。
var regexp = /\s+(.+)\s+(.+)/;
str = "hoge tanaka isao"
str.replace(regexp, " $2 $1")
hoge isao tanaka
ドメイン名を取得
var regexp = /^https?:\/{2}.*?([^/]*)/;
(x)
'x' にマッチし、マッチした内容を記憶します。この括弧はキャプチャリング(格納)括弧と呼ばれます。
例えば、パターン/(foo) (bar)\1 \2/内の '(foo)' と '(bar)' は、文字列 "foo bar foo bar" の最初の 2 個の単語にマッチし、それを記憶します。パターン内の \1 と\2 の 1 個目と 2 個目の括弧内の文字、すなわち foo と barを表し、文字列の最後の 2 個の単語にマッチします。\1, \2, ..., \n は正規表現のマッチ部分で使用することに注意してください。詳しくは下記の \n を参照してください。 置換部分で使用する際は $1, $2, ..., $n とする必要があります。例えば、 'bar foo'.replace(/(...) (...)/, '$2 $1')というように。$& はマッチした文字列全体を意味します。
aタグのリンク先(href="hoge"->hoge)を取得.
var regexp = /(^<a.*?href\s?=\s?['](.*?)['])|(^<a.*?href\s?=\s?["](.*?)["])/;
#正規表現